const headers = {
    'Content-Type': 'application/json',
    Authorization:
        'Bearer eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjoiMTNlZmFjZGI2OTgwMmMzZiIsInVzZXJfa2V5IjoiMDM2MDIyNWUtOTA1ZS00ZWU2LWEwMDAtODc0NmQ4OTQ5NzhlIiwidXNlcm5hbWUiOiJodWppYWxlIn0.8bc6QQTxvBdsfmIJ-FdCkf29_K2nWI5-10hDPR9qzq1X-nkkFRK58_Lqrd24_kOY6MD-dUN19wfAYvGEwxP1Vw',
}

// 由于在网站中是点击工作面进来绘图页面的，所以需要根据工作面id获取设备id列表，才能根据设备id和时间去选择对应的csv文件
const getDeviceList = async (body) => {
    const url = '/api-iot-phm/business/device/deviceList'
    try {
        const response = await fetch(url, {
            method: 'POST',
            headers,
            body: JSON.stringify(body),
        })

        if (!response.ok) {
            throw new Error('请求失败，状态码：' + response.status)
        }
        console.log(response)

        const res = await response.json()
        console.log('请求成功，返回数据：', res.data)

        const deviceList = res.data.map((item) => {
            return { id: item.deviceId, name: item.deviceName }
        })

        return deviceList // 返回 deviceList
    } catch (error) {
        console.log(error)
        return [] // 如果出错，返回空数组
    }
}

// 根据设备id和需要的数据所在的日期来获取到对应的数据，原是csv文件通过二进制流的方式进行传输，现在读取二进制流，直接转换为文本进行操作，不再进行下载操作
// 由于Dygraphs的读取数据的特性，对于时间格式有要求，暂时发现的有以下格式：
// 1.纯数字，如：00001；2.ISO 8601格式，如：2023-10-01T00:00:00.000Z，3.日期-时间，如：YYYY-MM-DD HH-MM-SS，4.多个纯日期（日期不能为同一个天），如：YYYY-MM-DD
// 因此要单独对时间进行处理，因为曲线要精确到秒，考虑到有某时间段曲线数据是空，为了保证时间与数据对应，所以采用2或3的方法，由于原文件是具有日期列和时间列，所以才有第三种方法，将两列用' '拼接
const getDeviceCsv = async (id, time) => {
    const url = '/api-iot-phm/business/detail/dataDownload'
    const body = {
        deviceId: id,
        fileTime: time,
    }
    console.log(body)
    try {
        const response = await fetch(url, {
            method: 'POST',
            headers,
            body: JSON.stringify(body),
        })

        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`)
        }

        // 将返回的 Blob 转换为文本内容
        const text = await response.text()

        // 直接使用解析CSV的逻辑处理文本内容
        const processedCSV = processCSVContent(text)
        // console.log('处理后的 CSV 内容：', processedCSV)
        return processedCSV
    } catch (error) {
        // console.error('下载或解析文件时出错：', error)
    }
}

const processCSVContent = (content) => {
    const lines = content.split('\n')
    if (lines.length < 2) {
        console.error('CSV 文件内容不足')
        return '无内容'
    }

    // 删除第一行
    lines.shift()

    // 获取新的表头
    const header = lines.shift()
    const columns = header.split(',')

    // 检查表头是否包含日期和时间列
    const dateIndex = columns.indexOf('日期')
    const timeIndex = columns.indexOf('时间')
    if (dateIndex === -1 || timeIndex === -1) {
        console.error('CSV 文件中缺少日期或时间列')
        return '无内容'
    }

    // 删除日期和时间列
    columns.splice(dateIndex, 1)
    columns.splice(timeIndex - 1, 1) // 注意：删除日期列后，时间列的索引会变化

    // 在最前面新建一列，命名为“时间”
    columns.unshift('时间')

    const processedLines = [columns.join(',')] // 新的表头
    lines.forEach((line) => {
        const columns = line.split(',')
        if (columns.length > Math.max(dateIndex, timeIndex)) {
            try {
                // 将日期和时间用空格连接
                const dateTime = columns[dateIndex] + ' ' + columns[timeIndex]
                // 删除日期和时间列
                columns.splice(dateIndex, 1)
                columns.splice(timeIndex - 1, 1) // 注意：删除日期列后，时间列的索引会变化
                // 在最前面插入合并后的日期时间
                columns.unshift(dateTime)
            } catch (err) {
                console.error(err.message)
                return // 保留原行，不处理
            }
        }
        processedLines.push(columns.join(','))
    })

    // 将处理后的数据以 CSV 格式的字符串返回
    return processedLines.join('\n')
}

// 根据设备id获取当前设备上传的设置列表
const getDeviceSettings = async (body) => {
    const url = '/api-iot-phm/business/columnConf/list'
    try {
        const response = await fetch(url, {
            method: 'POST',
            headers,
            body: JSON.stringify(body),
        })
        return response.json()
    } catch (error) {
        console.error(error)
    }
}

// 向当前设备中添加设备设置
const addDeviceSettings = async (body) => {
    const url = '/api-iot-phm/business/columnConf/add'
    await fetch(url, {
        method: 'POST',
        headers,
        body: JSON.stringify(body),
    })
        .then((response) => {
            console.log(response)
        })
        .catch((error) => {
            console.error(error)
        })
}

// 更新设置
const updateDeviceSettings = async (body) => {
    const url = '/api-iot-phm/business/columnConf/update'
    await fetch(url, {
        method: 'POST',
        headers,
        body: JSON.stringify(body),
    })
        .then((response) => {
            console.log(response)
        })
        .catch((error) => {
            console.error(error)
        })
}

// 删除设置
const deleteDeviceSettings = async (body) => {
    const url = '/api-iot-phm/business/columnConf/delete'
    await fetch(url, {
        method: 'POST',
        headers,
        body: JSON.stringify(body),
    })
        .then((response) => {
            console.log(response)
        })
        .catch((error) => {
            console.error(error)
        })
}

// 根据设置的id来获取设置，用于选取某一设置时，获得其内容
const getSettingsInfoUseId = async (body) => {
    const url = '/api-iot-phm/business/columnConf/getInfo'
    try {
        const response = await fetch(url, {
            method: 'POST',
            headers,
            body: JSON.stringify(body),
        })
        return response.json()
    } catch (error) {
        console.error(error)
    }
}

export {
    getDeviceList,
    getDeviceCsv,
    getDeviceSettings,
    addDeviceSettings,
    updateDeviceSettings,
    deleteDeviceSettings,
    getSettingsInfoUseId,
}
